<?php


/**
 * Description of DataBaseConection
 * La clase encargada de realizar la conexión a la base de datos, es la única clase
 * que tiene comunicación directa con la capa de persistencia, para poder obtener datos desde 
 * otra clase, se debe instancia la clase DataBaseConection.
 * @author Paola Andrea Pedraza
 */

 
class DataBaseConection{
    
    
    /**
     *Los atributos de la clase
     * @var type 
     */
    
    /*
     * La base de datos principal o por defecto en todas las conexiones
     */
    private $dbconection;
        
           
    /*
     * El usuario con el que se conecta a la base de datos
     */
    private $userconection;
    /*
     * La contraseña con la que se conecta a la base de datos
     */
    private $passconection;
    /*
     * La cadena de conexión (link), para establecer comunicación con la base de datos
     */
    private $stringconection;
    /*
     * La ip o nombre del servidor para establecer la conexión
     */
    private $hostconection;
    
    
    /**
     * El constructor de la clase donde están los datos para la conexión desde los métodos
     */
    public function __construct() {
    
        $this->dbconection="agencia_viajes";
        $this->userconection="root";
        $this->passconection="";
        $this->hostconection="localhost";
        
    }
    
    
   

     /**
     * Conexión a la base de datos
     * @return Retorna la cadena de conexión, o puede retornar un mensaje de error en caso de que lo haya
     */
    private function conect(){
              
       $this->stringconection=mysql_connect($this->hostconection, $this->userconection,  $this->passconection);
       mysql_select_db($this->dbconection,$this->stringconection);
       mysql_query("SET NAMES utf8");
       if(!$this->stringconection){
            return "<br>Error al conectar con el servidor";
       if(!mysql_select_db($this->dbconection,  $this->stringconection))
            return "<br>Error en la conexion con la base de datos";
       }
       return $this->stringconection;
               
    }
    
    
    
    
        
    
    /**
     * Escapa caracteres invalidos de una cadena que llega por parámetro
     * @param type $parametro
     * @return type String 
     */
    public function limpiar($parametro){
        return mysql_real_escape_string($parametro);
    }
    
    
    
    
    /**
     *Retorna un Array dependiendo de la consulta que reciba como parámetro, es decir el array
     * que retorna es un array asociativo con los nombres de las columnas de la base de datos que haya generado la consulta
     * @param type String $query 
     * @return Array -> Un array con los datos de la consulta
     */
    public function RetornarArrayFromQuery($query){
        
        
        $stringCreateArray='';
                     
        
        $result=  mysql_query($query, $this->conect());//Se ejecuta la consulta y se guarda en un result set
        
        //print $query;
        
        if(!$result)
            return false;
        
        if(mysql_num_rows($result)==0)
            return null;
        
        
        $numFields=mysql_num_fields($result);
        //print $numFields.'Campos';
        for($x=0;$x<$numFields;$x++){
        $stringCreateArray.=mysql_field_name($result,$x).",";
        
        //print_r($row);
        //La consulta puede arrojar más de una fila de datos
        }
        $stringCreateArray=substr($stringCreateArray, 0,-1);
        //print $stringCreateArray;
        $myArray=Array($stringCreateArray);//Se crea un array con tres indices para almacenar la tabla
        $stringCreateArray=explode(",", $stringCreateArray);
        for($y=0;$y<count($stringCreateArray);$y++){
            $myArray[$stringCreateArray[$y]]=Array();//Cada Índice es un nuevo array
        }
        
        
        while ($row = mysql_fetch_assoc($result)) {//Se recorre el result set
            for($t=0;$t<count($stringCreateArray);$t++)
            $myArray[$stringCreateArray[$t]][]=$row[$stringCreateArray[$t]];//Se almacena el crédigo de crédito en la matriz
        
        }
               
        
        //print_r($myArray);
        return $myArray;//Se retorna un array con los datos obtenidos
    }
    
    
    
    /**
     * Retorna el número de filas de una consulta
     * @param type $sqlconsult
     * @return type 
     * 
     */
        
    public function returnnumFil($sqlconsult){
        
            $this->conect();
            $ejecucion=mysql_query($sqlconsult, $this->stringconection);
            //print $sqlconsult;
            
            $numfil=@mysql_num_rows($ejecucion);
            mysql_close();
            
            
            return $numfil;
        
 
        
    }
    
    
     /**
      *Ejecuta una consulta que no devuelve nada (Lo único que retorna es un booleano, dependiendo su la consulta se ejecutó bien o mal)
      * @param type $sqlconsult
      * @return type 
      */
     public function onlyRun($sqlconsult){
        $this->conect();
        $ejecucion=mysql_query($sqlconsult, $this->stringconection);
        //print $sqlconsult;
        //$numfil=mysql_num_rows($ejecucion);
        mysql_close();
        if($ejecucion){
            mysql_query ("COMMIT", $this->stringconection);
            return TRUE;
        }
        else{
            
            mysql_query ("ROLLBACK", $this->stringconection);
            return FALSE;
        }
        
    }
    
    /**
     *Recibe unos parámetros y retorna un valor específico de una tabla
     * @param String $valor  -> El valor de comparación
     * @param String $tabla -> La tabla que se desea consulta
     * @param String $nombrecampo -> El nombre del campo de compración
     * @param String $camporetornar -> El campo que se desea obtener
     * @return String
     */
    public function returnValue($valor, $tabla, $nombrecampo, $camporetornar){
        $this->conect();
        $sqlconsult="select $camporetornar from $tabla where $nombrecampo='$valor'";
	//print $sqlconsult;
	$ejecucion=mysql_query($sqlconsult,$this->stringconection);
	$arraydatos=mysql_fetch_array($ejecucion);
        mysql_close();
	return $arraydatos["$camporetornar"];
    
    }
    
    
    
    
    
    
    
    /**
     * Este método retorna un valor específico de un query (Sólo toma el primer registro)
     * @param string $query
     * @param String $camporetornar
     * @return String
     */
    public function returnValueFromQuery($query, $camporetornar){
                $this->conect();
        $query=$query." LIMIT 0,1";
	
        if($this->returnnumFil($query)>0){
            $ejecucion=mysql_query($query,$this->stringconection);
            $arraydatos=mysql_fetch_array($ejecucion);
            
            return $arraydatos["$camporetornar"];
        }
        else
            return null;
	
        mysql_close();
    }
    
    /**
     * Retorna el ultimo valor insertado en una tabla
     * @param type $table
     * @return type 
     */
    public function returnLast($table){
        $this->conect();
        $last = "SELECT LAST_INSERT_ID() fin FROM $table";	
        $ejecucion=mysql_query($last, $this->stringconection);
        $arraylastId = mysql_fetch_array($ejecucion);
	$lastId = $arraylastId['fin'];
        return $lastId;
    }
    
    
    public function returnOneRow($sqlconsult){
        $this->conect();
        $ejecucion=mysql_query($sqlconsult, $this->stringconection);
        $rowReturn=  mysql_fetch_assoc($ejecucion);
        
        mysql_close();
        return $rowReturn;
    }
    
       
}
?>